﻿using System.Collections.Generic;
using System.Linq;

namespace Pap.Data.Abstraction.Utils
{
    /// <summary>
    /// 
    /// </summary>
    public interface IWorkFlow : ISubmitChanges
    {
        /// <summary>
        /// Gets the wf process instances.
        /// </summary>
        IQueryable<IwfProcessInstance> wfProcessInstances { get; }
        /// <summary>
        /// Gets the wf step instances.
        /// </summary>
        IQueryable<IwfStepInstance> wfStepInstances { get; }
        /// <summary>
        /// Gets the wf steps.
        /// </summary>
        IQueryable<IwfStep> wfSteps { get; }


        /// <summary>
        /// Deletes the specified entity.
        /// </summary>
        /// <typeparam name="TEntity">The type of the entity.</typeparam>
        /// <param name="entity">The entity.</param>
        void Delete<TEntity>(TEntity entity) where TEntity : IEntity;
        /// <summary>
        /// Deletes all.
        /// </summary>
        /// <typeparam name="TEntity">The type of the entity.</typeparam>
        /// <param name="entities">The entities.</param>
        void DeleteAll<TEntity>(IEnumerable<TEntity> entities) where TEntity : IEntity;

        /// <summary>
        /// Inserts the specified entity.
        /// </summary>
        /// <typeparam name="TEnity">The type of the enity.</typeparam>
        /// <param name="entity">The entity.</param>
        void Insert<TEnity>(TEnity entity) where TEnity : IEntity;
        /// <summary>
        /// Inserts all.
        /// </summary>
        /// <typeparam name="TEntity">The type of the entity.</typeparam>
        /// <param name="entities">The entities.</param>
        void InsertAll<TEntity>(IEnumerable<TEntity> entities) where TEntity : IEntity;

    }
}
